#include <map>
#include <string>
#include <iostream>

using namespace std;

/*
单位数字
Roman       Integer
I           1
V           5
X           10
L           50
C           100
D           500
M           1000

----------------------------------------------------------------
组合数字
一、通用规则
大的数字必须写在小的数字前面，执行加法
II          2
III         3
VI          6
VII         7
VIII        8

二、特殊规则
特定的小数字可以写在特定的大数字前面，执行减法
2.1 
IV / IX: 4 / 9

2.2
XL / XC: 40 / 90

2.3
CD / CM: 400 / 900

LVIII: 50 6 + 2 = 58
MCMXCIV: 1994
XCIX: 99

*/

// III
// "III" -> 3
map<char, int> dic {
  {'I', 1}, {'V', 5}, {'X', 10}, {'L', 50}, {'C', 100}, {'D', 500}, {'M', 1000}
};

int r2i(const string &roman) {
  int result = 0;

  for (int i = 0; i < roman.size(); ++i) {
    int j = i + 1;
    /*
      如果 位置 i 的字符表示的数字 < 位置 j 的字符表示的数字:
        result -= 位置 i 的字符表示的数字;
      否则:
        result += 位置 i 的字符表示的数字;
    */
    if (j < roman.size() && dic[roman[i]] < dic[roman[j]]) {
      result -= dic[roman[i]];
    }
    else {
      result += dic[roman[i]];
    }
  }

  return result;
}

int main(int argc, char const *argv[])
{
  /* code */
  cout << r2i("MCMXCIV") << endl;
  return 0;
}
